가상 메모리
가상 메모리는 물리 메모리의 크기와 상관없이 메모리를 이용할 수 있도록 지원하는 기술이다. 프로그래머는 가상 메모리 덕분에 물리 메모리의 크기에 구애받지 않고 작업할 수 있는 커다란 공간을 얻게 되는 셈이다.
즉, 가상 메모리는 크기가 다른 물리 메모리에서 일관되게 프로세스를 실행할 수 있는 기술이다.
다중 프로그래밍을 실현하기 위해서는 많은 프로세스들을 동시에 메모리에 올려두어야 한다. 가상 메모리는 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법이며, 프로그램이 물리 메모리보다 커도 된다는 주요 장점이 있다.
가상 메모리라는 것은 단어 그대로의 Virtual이 아니다. 마치 없는 것을 만들어내는 듯한 느낌인데, 실제로는 이미 있는 것을 다르게 사용하는 의미히다. 가상 메모리의 실제 공간은 하드디스크 + RAM이다.
물론 실제로 프로세스가 실행될 수 있는 메모리 공간은 램 크기 만큼이지만 운영체제가 가상 메모리
공간을 프로세스에게 제공해줌으로써 프로세스는 자신을 모두 메모리에 적재했다는 착각을 한다.
프로세스 입장에서는 가상 메모리 공간도 물리 메모리 공간으로 인식하는 것이다. 그리고 운영체제는
가상 메모리에 걸쳐서 적재된 프로세스의 부분이 실제로 적재가 필요하다면 물리 메모리 공간과
swap
해준다.
프로세스의 모든 코드가 한번에 물리 메모리에서 돌아가는 일은 없다. 필요한 부분만 실제 물리 메모리로 올라가기만 하면 되기 때문에, 이 부분을 운영체제가 계속 swapping 해주는 것을 통해 가상 메모리를 구현한다. 애플리케이션이 실행될 때, 실행에 필요한 일부분만 메모리에 올라가며 애플리케이션의 나머지는 디스크에 남게된다. 즉, 디스크가 RAM의 보조 기억장치(backing store)처럼 작동하는 것이다. 가상 메모리를 구현하기 위해서는 컴퓨터가 특수 메모리 관리 하드웨어를 갖추고 있어야 한다. (MMU, Memory Management Unit)
MMU는 가상 주소를 물리주소로 변환하고, 메모리를 보호하는 기능을 수행한다. MMU를 사용하게 되면, CPU가 각 메모리에 접근하기 이전에 메모리 주소 번역 작업이 수행된다. 그러나 메모리를 일일이 가상 주소에서 물리적 주소로 번역하게 되면 작업 부하가 너무 높아지므로, MMU는 RAM을 여러부분(페이지, pages)로 나누어 각 페이지를 하나의 독립된 항목으로 처리한다. 페이지 및 주소 번역 정보를 기억하는 작업이 가상 메모리를 구현하는데 있어 결정적인 절차이다.